#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QPixmap>
#include <QMediaPlayer>
#include<QAudioOutput>
#include<QPalette>
#include "bird.h"
#include "kuba.h"
#include"mybutton.h"
#include "mydialog.h"
#include "myrole.h"
#include <QGraphicsPixmapItem>
#include <QKeyEvent>
#include <QList>
#include<QTimer>
#include "guangbo.h"
#include<algorithm>
#include <QRectF>
#include <QLabel>
#include "unmoveobject.h"
#include "zhangyu.h"
#include <QPair>
#include<qrandom.h>
#include <random>
#include <QLabel>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void Init();
    //进入游戏主要部分
    void Init_Game();
    //马里奥移动
    void marioInit();
    //按钮设置
    void buttonInit();
    //失败视图设置
    void failViewInit();
    //失败视图展示
    void failWidget();
    //开始视图设置
    void startViewInit();
    //开始视图展示
    void startWidget();
    //通关视图展示
    void successWidget();
    //通关视图设置
    void successViewInit();
    //简介对话框设置
    void introduceDalInit();
    //背景音乐设置
    void bgMusicInit();
    //怪物初始化
    void monsterInit();
    //游戏界面设置
    void gameViewInit();
    //整个游戏界面加载
    void gameLoad();
    //复活重新进入游戏界面
    void restartGame();
    //掉坑检测
    void dropDetect();
    //不能移动物体设置
    void uMObjectInit();
    //烟囱喷火设置
    void fireInit();
    //游戏获胜检测
    void gameWin();
    //打开定时器
    void turnOnTimer();
    //关闭定时器
    void turnOffTimer();
    //暂停界面设置
    void stopViewInit();
    //暂停界面展示
    void stopWidget();
    //库巴设置
    void kubaInit();
    //食人花设置
    void shirenhuaInit();
    //章鱼设置
    void zhangyuInit();
    //小鸟设置
    void birdInit();
    //键盘事件
    virtual void keyPressEvent(QKeyEvent *event)override;
    virtual void keyReleaseEvent(QKeyEvent* event)override;

private:
    Ui::Widget *ui;
    //开始视图
    QGraphicsView mStartView;
    //游戏主界面视图
    QGraphicsView mGameView;
    //失败视图
    QGraphicsView mFDalView;
    //游戏简介视图
    QGraphicsView mIDalView;
    //通关视图
    QGraphicsView mSucView;
    //开始场景
    QGraphicsScene mStartScene;
    //游戏主界面场景
    QGraphicsScene mGameScene;
    //失败场景
    QGraphicsScene mFDalScene;
    //游戏简介场景
    QGraphicsScene mIDalScene;
    //通关场景
    QGraphicsScene mSucScene;
    //按钮音效
    QMediaPlayer* buttonAudioPlayer = nullptr;
    QAudioOutput* buttonAudioOutput = nullptr;
    //背景音乐
    QMediaPlayer* bgBgmPlayer=nullptr;
    QAudioOutput* bgBgmoutput=nullptr;
    QMediaPlayer* sucBgmPlayer=nullptr;
    QAudioOutput* sucBgmoutput=nullptr;
    QMediaPlayer* failBgmPlayer=nullptr;
    QAudioOutput* failBgmoutput=nullptr;
    //按钮
    MButton* startBtn=nullptr;
    MButton* introduceBtn=nullptr;
    MButton* escBtn=nullptr;
    MButton* onceMoreBtn=nullptr;
    MButton* backBtn=nullptr;
    //游戏人物
    MRole marioIcon;
    MRole monsterIcon;
    QList<MRole*> monsterList;
    //马里奥移动处理
    int tmpMoveDir1=0;
    int tmpMovwDir2=0;
    qreal g=0.12;
    qreal v=0;
    qreal x=0;
    qreal y0=0;
    qreal x0=0;
    qreal x1=0;
    int timecnt=0;
    int tmpdir=0;
    //定时器
    QTimer* marioMoveTimer=nullptr;
    QTimer* monsterMoveTimer=nullptr;
    QTimer* monsterCrashTimer=nullptr;
    QTimer* successDetectTimer=nullptr;
    QTimer* caveDropDetectTimer=nullptr;
    QTimer* fireUpMoveTimer=nullptr;
    QTimer* kubaMoveTimer=nullptr;
    QTimer* kubaActionTimer=nullptr;
    QTimer* kubaCrashTimer=nullptr;
    QTimer* kubaGuangboMvTimer=nullptr;
    QTimer* shirenhuaTimer=nullptr;
    QTimer* zhangyuMoveTimer=nullptr;
    QTimer* zyActionTimer=nullptr;
    QTimer* birdMoveTimer=nullptr;
    QTimer* bdActionTimer=nullptr;
    QTimer* boomMoveTimer=nullptr;
    //怪物移动处理
    qreal monsterl=0;
    qreal monsterr=0;
    bool monsterDir=0;//0向左，1向右
    QRectF *tmpa=nullptr;
    QRectF *tmpb=nullptr;
    //烟囱喷火设置
    QList<guangBo*> fireUpList;
    //对话框
    MDialog *failDialog=nullptr;
    MDialog *introduceDal=nullptr;
    //游戏简介
    QLabel* word;
    QLabel* label;
    //失败文字
    QLabel *failLabel;
    //成功文字
    QLabel *successLabel;
    //成功的大门矩形
    QRectF *successDoor;
    //坑的矩形
    QList<QRectF> caveDrop;
    //不能移动物体链表
    QList<QRectF> objectList;
    //库巴
    QList<kuba*> kubaList;
    //库巴的火焰
    QList<guangBo*> kubaGuangbo;
    //食人花设置
    QList<UnmoveObject*> shirenhua;
    //章鱼设置
    QList<zhangyu*> zhangyuList;
    //小鸟设置
    QList<bird*> birdList;
    QList<guangBo*> birdBoomList;

    //调bug工具

};
#endif // WIDGET_H
